#!/bin/bash

# Codelin CLI构建脚本 - Phase 1 CLI原生化
# 
# 功能：
# 1. 构建CLI版本的Codelin
# 2. 创建符号链接支持全局调用
# 3. 测试CLI功能
# 4. 性能基准测试

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 项目根目录
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BUILD_DIR="${PROJECT_ROOT}/target"
CLI_BINARY="${BUILD_DIR}/codelin"

echo -e "${BLUE}🚀 Codelin CLI构建脚本 - Phase 1 CLI原生化${NC}"
echo "=================================================="

# 1. 清理构建目录
echo -e "${YELLOW}📁 清理构建目录...${NC}"
if [ -d "$BUILD_DIR" ]; then
    rm -rf "$BUILD_DIR"
fi
mkdir -p "$BUILD_DIR"

# 2. 构建项目
echo -e "${YELLOW}🔨 构建Codelin项目...${NC}"
cd "$PROJECT_ROOT"

# 检查cjpm是否可用
if ! command -v cjpm &> /dev/null; then
    echo -e "${RED}❌ cjpm命令未找到，请确保仓颉开发环境已正确安装${NC}"
    exit 1
fi

# 执行构建
echo "执行: cjpm build"
if cjpm build; then
    echo -e "${GREEN}✅ 项目构建成功${NC}"
else
    echo -e "${RED}❌ 项目构建失败${NC}"
    exit 1
fi

# 3. 查找生成的可执行文件
echo -e "${YELLOW}🔍 查找生成的可执行文件...${NC}"

# 查找主可执行文件
MAIN_BINARY=$(find "$PROJECT_ROOT" -name "codelin" -type f -executable 2>/dev/null | head -1)
if [ -n "$MAIN_BINARY" ]; then
    echo "找到主可执行文件: $MAIN_BINARY"
    cp "$MAIN_BINARY" "$CLI_BINARY"
else
    echo -e "${RED}❌ 未找到主可执行文件${NC}"
    exit 1
fi

# 查找CLI可执行文件
CLI_MAIN_BINARY=$(find "$PROJECT_ROOT" -name "cli_main" -type f -executable 2>/dev/null | head -1)
if [ -n "$CLI_MAIN_BINARY" ]; then
    echo "找到CLI可执行文件: $CLI_MAIN_BINARY"
    cp "$CLI_MAIN_BINARY" "${BUILD_DIR}/codelin-cli"
fi

# 4. 设置执行权限
echo -e "${YELLOW}🔐 设置执行权限...${NC}"
chmod +x "$CLI_BINARY"
if [ -f "${BUILD_DIR}/codelin-cli" ]; then
    chmod +x "${BUILD_DIR}/codelin-cli"
fi

# 5. 创建符号链接（可选）
echo -e "${YELLOW}🔗 创建符号链接...${NC}"
SYMLINK_DIR="/usr/local/bin"
if [ -w "$SYMLINK_DIR" ]; then
    ln -sf "$CLI_BINARY" "$SYMLINK_DIR/codelin"
    echo "✅ 已创建符号链接: $SYMLINK_DIR/codelin"
else
    echo "⚠️ 无法创建符号链接到 $SYMLINK_DIR (权限不足)"
    echo "💡 手动创建: sudo ln -sf $CLI_BINARY $SYMLINK_DIR/codelin"
fi

# 6. 基本功能测试
echo -e "${YELLOW}🧪 基本功能测试...${NC}"

# 测试帮助功能
echo "测试: $CLI_BINARY --help"
if "$CLI_BINARY" --help > /dev/null 2>&1; then
    echo "✅ 帮助功能正常"
else
    echo "⚠️ 帮助功能测试失败"
fi

# 测试版本功能
echo "测试: $CLI_BINARY --version"
if "$CLI_BINARY" --version > /dev/null 2>&1; then
    echo "✅ 版本功能正常"
else
    echo "⚠️ 版本功能测试失败"
fi

# 7. 性能基准测试
echo -e "${YELLOW}📊 性能基准测试...${NC}"

# 测试启动时间
echo "测试启动时间..."
START_TIME=$(date +%s%3N)
"$CLI_BINARY" --help > /dev/null 2>&1
END_TIME=$(date +%s%3N)
STARTUP_TIME=$((END_TIME - START_TIME))

echo "启动时间: ${STARTUP_TIME}ms"

if [ "$STARTUP_TIME" -lt 2000 ]; then
    echo -e "${GREEN}✅ 启动时间优秀 (<2秒)${NC}"
elif [ "$STARTUP_TIME" -lt 5000 ]; then
    echo -e "${YELLOW}⚠️ 启动时间可接受 (<5秒)${NC}"
else
    echo -e "${RED}❌ 启动时间需要优化 (>5秒)${NC}"
fi

# 8. 显示构建结果
echo -e "${BLUE}📋 构建结果总结${NC}"
echo "=================================================="
echo "主可执行文件: $CLI_BINARY"
if [ -f "${BUILD_DIR}/codelin-cli" ]; then
    echo "CLI可执行文件: ${BUILD_DIR}/codelin-cli"
fi
echo "启动时间: ${STARTUP_TIME}ms"
echo ""

# 9. 使用说明
echo -e "${GREEN}🎉 构建完成！${NC}"
echo ""
echo "使用方法:"
echo "  $CLI_BINARY \"生成一个Python计算器\"     # 直接模式"
echo "  echo \"修复bug\" | $CLI_BINARY          # 管道模式"
echo "  $CLI_BINARY --file main.py \"优化代码\" # 文件模式"
echo "  $CLI_BINARY                            # 交互模式"
echo ""
echo "如果创建了符号链接，也可以直接使用:"
echo "  codelin \"您的编程任务\""
echo ""

# 10. 开发者提示
echo -e "${BLUE}💡 开发者提示${NC}"
echo "- 源码位置: $PROJECT_ROOT/src"
echo "- 构建配置: $PROJECT_ROOT/cjpm.toml"
echo "- 重新构建: cd $PROJECT_ROOT && cjpm build"
echo "- 清理构建: rm -rf $PROJECT_ROOT/target"
